//***************************************************************************************
// MediaFrame is an Open Source streaming media platform in Java 
// which provides a fast, easy to implement and extremely small applet 
// that enables to view your audio/video content without having 
// to rely on external player applications or bulky plug-ins.
//
//--------------------------------------------------------------------------------------
//
// We changed a lot of code and added a lot of functionality.
// This includes, but not limited to, the following changes:
// 1. The project was renamed to MediaFrame;
// 2. The connection speed detection procedure was added;
// 3. The JavaScript API functions were added;
// 4. The pre and post image support functionality was added;
// 5. The ability to save movie into the local disk was added;
// 6. The inner buffer for a movie file was added;
// 7. The click-through functionality was added;    
// 8. The .zip files support was added;    
// 9. The realtime feedback agent functionality was added.    
// For the full list of the current functionality please visit the following web page:
// http://mediaframe.org/
//    
// 06 Jul 2002 - 19 Dec 2004 Konstantin Belous, Oleg Lebedev
//
//--------------------------------------------------------------------------------------
//
// This program is free software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
// PARTICULAR PURPOSE. See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this
// program; (See "LICENSE.GPL"). If not, write to the Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
//--------------------------------------------------------------------------------------
//
// If the program runs as Java applet it isn't "interactive" in the sense of the GNU
// General Public License. So paragraph 2c doesn't apply.
//
//**************************************************************************************
package mediaframe.mpeg1.audio.player;

import java.io.*;

/**
 * The <code>BigPipedOutputStream</code> represents the Piped Output Stream.
 * It writes the data into the <code>BigPipedInputStream</code> using it's "receive" method 
 * when the client wants to write the data into the stream.
 *
 * @author  Konstantin Belous
 * @version 1.0 26.07.2002
 *
 */
public class BigPipedOutputStream {
	
	/** The reference to the input stream in the pipe. */
	BigPipedInputStream inputPipe = null;

	/**
	 * Constructs a <code>BigPipedOutputStream</code> class with the specified 
	 * <code>BigPipedInputStream</code> object in the pipe.
	 * @param snk the <code>BigPipedInputStream</code> object.
	 */
	public BigPipedOutputStream(BigPipedInputStream snk) {
		super();
		connect(snk);
	}

	/**
	 * Closes the pipe.
	 */
	public void close() {
		if(inputPipe != null) {
			inputPipe.isClosedByWriter = true;
			inputPipe.notify_reader();
		}
	}

	/**
	 * Connects this object with the specified <code>BigPipedInputStream</code> object in the pipe.
	 * @param snk the <code>BigPipedInputStream</code> object.
	 */
	public void connect(BigPipedInputStream snk) {
		inputPipe = snk;
		snk.outputPipe = this;
	}

//	public void flush() throws IOException {
//		if(inputPipe != null) {
//			inputPipe.notify_reader();
//		}
//	}
	
	/**
	 * Writes <code>len</code> bytes from the specified short array starting at offset <code>off</code> 
	 * to this stream.
	 * 
	 * @param b the data.
	 * @param off the start offset in the data.
	 * @param len the number of bytes to write.
	 * @throws IOException raises if a error occurs.
	 */
	public void write(short[] b, int off, int len) throws IOException {

		if(inputPipe != null) {
			for(int i = 0; i < len; i++)
				inputPipe.receive(b[off + i]);
		}
	}

}